package br.com.sismo.server;

import java.util.List;

import br.com.sismo.client.GreetingService;
import br.com.sismo.server.dao.impl.CursoDAOImpl;
import br.com.sismo.server.dao.impl.UsuarioDAOImpl;
import br.com.sismo.server.entity.Curso;
import br.com.sismo.server.entity.Usuario;
import br.com.sismo.shared.CursoTO;
import br.com.sismo.shared.UsuarioTO;

import com.google.appengine.api.oauth.OAuthRequestException;
import com.google.appengine.api.oauth.OAuthService;
import com.google.appengine.api.oauth.OAuthServiceFactory;
import com.google.appengine.api.users.User;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;

/**
 * The server side implementation of the RPC service.
 */
@SuppressWarnings("serial")
public class GreetingServiceImpl extends RemoteServiceServlet implements
		GreetingService {
	private UsuarioDAOImpl usuarioDao;
	private CursoDAOImpl cursoDao;	

	private UsuarioDAOImpl getUsuarioDAO() {
		if (usuarioDao == null) {
			usuarioDao = new UsuarioDAOImpl();
		}
		return usuarioDao;
	}
	
	private CursoDAOImpl getCursoDAO() {
		if(cursoDao == null) {
			cursoDao = new CursoDAOImpl();
		}
		return cursoDao;
	}

	public String greetServer(String input) throws IllegalArgumentException {
		OAuthService o = OAuthServiceFactory.getOAuthService();
		User u;
		try {
			u = o.getCurrentUser();
		} catch (OAuthRequestException e) {
			return "erro";
		}
		return u.getEmail();
	}

	@Override
	public List<UsuarioTO> findAllUsuarios() {
		return getUsuarioDAO().findAll();
	}

	@Override
	public List<UsuarioTO> findUsuarioByNome(String nome) {
		return getUsuarioDAO().findByNome(nome);
	}

	@Override
	public void addUsuario(UsuarioTO u) {
		getUsuarioDAO().persist(new Usuario(u));
	}

	@Override
	public int numUsuarios() {
		return getUsuarioDAO().numUsuarios();
	}

	@Override
	public void removeUsuario(Long id) {
		getUsuarioDAO().removeUsuario(id);
	}

	@Override
	public void addCurso(CursoTO c) {
		getCursoDAO().persist(new Curso(c));
	}

	@Override
	public List<CursoTO> findAllCursos() {
		return getCursoDAO().findAll();
	}

	@Override
	public void removeCurso(Long id) {
		getCursoDAO().removeCurso(id);
	}

	@Override
	public List<UsuarioTO> findUsuariosByIds(List<Long> ids) {
		return null;
	}
}
